Skip to content

Commit

Permalink
Merge branch 'master' of github.com:sacode387/FlowRun
Browse files Browse the repository at this point in the history
  • Loading branch information
sake92 committed Sep 4, 2023
2 parents 2ed5253 + 46afc6b commit 83928aa
Show file tree
Hide file tree
Showing 13 changed files with 26 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ enum PredefinedFunction(val name: String) {
case CharAt extends PredefinedFunction("charAt")
// conversions
case RealToInteger extends PredefinedFunction("real2int")
case StringToInteger extends PredefinedFunction("string2int")
}

object PredefinedFunction {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,8 @@ class CPlusPlusGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length()"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"(int)${argOpt(0)}"
case StringToInteger =>
s"""try { Convert.ToInt32(${argOpt(0)}) } catch (FormatException) { 0 }"""
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ class CSharpGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length()"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"(int)${argOpt(0)}"
case StringToInteger => s"Convert.ToInt32(${argOpt(0)})"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ class GolangGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"${argOpt(0)}.toInt"
case StringToInteger => s"strconv.Itoa(${argOpt(0)})"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,8 @@ class JavaGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length()"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"(int)${argOpt(0)}"
case StringToInteger =>
s"""Integer.parseInt(${argOpt(0)})"""
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ class JavascriptGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => argOpt(0) // ??
case StringToInteger => s"parseInt(${argOpt(0)})"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ class KotlinGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length()"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"(int)${argOpt(0)}"
case StringToInteger =>
s"""try { Integer.parseInt(${argOpt(0)}) } catch (NumberFormatException e) { 0 }"""
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ class PhpGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"strlen(${argOpt(0)})"
case CharAt => s"${argOpt(0)}[${argOpt(1)}]"
case RealToInteger => argOpt(0) // ??
case StringToInteger =>
s""" intval(${argOpt(0)}) """.trim
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ class PythonGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"len(${argOpt(0)})"
case CharAt => s"${argOpt(0)}[${argOpt(1)}]"
case RealToInteger => s"int(${argOpt(0)})"
case StringToInteger => s"int(${argOpt(0)})"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ class RubyGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"${argOpt(0)}.toInt"
case StringToInteger => s"${argOpt(0)}.to_i"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ class ScalaGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"${argOpt(0)}.toInt"
case StringToInteger => s"${argOpt(0)}.toInt"
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,10 @@ class SwiftGenerator(val programAst: Program) extends CodeGenerator {
case Length => s"${argOpt(0)}.length"
case CharAt => s"${argOpt(0)}.charAt(${argOpt(1)})"
case RealToInteger => s"${argOpt(0)}.toInt"
case StringToInteger =>
s"""try Int(${argOpt(0)})! catch {
| case _: NumberFormatException => 0
|}""".stripMargin
}
}

Expand Down
7 changes: 7 additions & 0 deletions core/src/main/scala/dev/sacode/flowrun/eval/Interpreter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,13 @@ final class Interpreter(programModel: ProgramModel, flowrunChannel: Channel[Flow
args.head match
case n: RealVal => Future(IntegerVal(n.value.toInt))
case _ => throw EvalException(s"Expected a Real argument in function ${func.name}", id)

// conversions
case func @ StringToInteger =>
validateArgsNumber(id, func.name, 1, args.size)
args.head match
case n: StringVal => Future(IntegerVal(n.value.toInt))
case _ => throw EvalException(s"Expected a String argument in function ${func.name}", id)
}

private def validateArgsNumber(id: String, funName: String, expected: Int, got: Int): Unit =
Expand Down

0 comments on commit 83928aa

Please sign in to comment.