@@ -8,7 +8,7 @@ import dev.sacode.flowrun.eval.SymbolTable
8
8
import dev .sacode .flowrun .eval .SymbolKey
9
9
import dev .sacode .flowrun .eval .Symbol
10
10
11
- class NodeJsGenerator (override val programAst : Program ) extends JavascriptGenerator (programAst) {
11
+ class NodeJsGenerator (override val programAst : Program ) extends CodeGenerator {
12
12
13
13
override def generate : Try [CodeGenRes ] = Try {
14
14
@@ -166,4 +166,36 @@ class NodeJsGenerator(override val programAst: Program) extends JavascriptGenera
166
166
case Type .Boolean => " line"
167
167
case _ => " line"
168
168
169
+ import PredefinedFunction .*
170
+
171
+ override def predefFun (name : String , genArgs : List [String ]): String = {
172
+ def argOpt (idx : Int ) = genArgs.lift(idx).getOrElse(" " )
173
+
174
+ PredefinedFunction .withName(name).get match {
175
+ case Abs => s " Math.abs( ${argOpt(0 )}) "
176
+ case Floor => s " Math.floor( ${argOpt(0 )}) "
177
+ case Ceil => s " Math.ceil( ${argOpt(0 )}) "
178
+ case RandomInteger => s " Math.floor(Math.random()* ${argOpt(0 )}) "
179
+ case Sin => s " Math.sin( ${argOpt(0 )}) "
180
+ case Cos => s " Math.cos( ${argOpt(0 )}) "
181
+ case Tan => s " Math.tan( ${argOpt(0 )}) "
182
+ case Ln => s " Math.log( ${argOpt(0 )}) "
183
+ case Log10 => s " Math.log10( ${argOpt(0 )}) "
184
+ case Log2 => s " Math.log2( ${argOpt(0 )}) "
185
+ case Sqrt => s " Math.sqrt( ${argOpt(0 )}) "
186
+ case Pow => s " Math.pow( ${argOpt(0 )}, ${argOpt(1 )}) "
187
+ case Length => s " ${argOpt(0 )}.length "
188
+ case CharAt => s " ${argOpt(0 )}.charAt( ${argOpt(1 )}) "
189
+ case RealToInteger => argOpt(0 ) // ??
190
+ case StringToInteger => s " parseInt( ${argOpt(0 )}) "
191
+ case ReadInput => " line"
192
+ case ClearOutput => " process.stdout.write('\\ x1Bc')"
193
+ case NumRows => s " ${argOpt(0 )}.length "
194
+ case NumCols => s " ${argOpt(0 )}[0].length "
195
+ }
196
+ }
197
+
198
+ override def funCall (name : String , genArgs : List [String ]): String =
199
+ s """ $name( ${genArgs.mkString(" , " )}) """ .trim
200
+
169
201
}
0 commit comments