mirror of https://github.com/japl-lang/japl.git
Added value checking with 'as' conversion + minor fixes to testmarkup.md
This commit is contained in:
parent
4a9f210e28
commit
cd180fe4d7
|
@ -29,10 +29,11 @@ import ../config
|
||||||
import ../memory
|
import ../memory
|
||||||
import ../meta/opcode
|
import ../meta/opcode
|
||||||
import arraylist
|
import arraylist
|
||||||
when DEBUG_TRACE_ALLOCATION:
|
import exception
|
||||||
import strformat
|
|
||||||
|
|
||||||
|
import strformat
|
||||||
import parseutils
|
import parseutils
|
||||||
|
import strutils
|
||||||
|
|
||||||
|
|
||||||
proc typeName*(self: ptr Obj): string =
|
proc typeName*(self: ptr Obj): string =
|
||||||
|
@ -433,10 +434,16 @@ proc objAs*(self: ptr Obj, other: ObjectType): returnType =
|
||||||
of ObjectType.Integer:
|
of ObjectType.Integer:
|
||||||
case self.kind:
|
case self.kind:
|
||||||
of ObjectType.String:
|
of ObjectType.String:
|
||||||
|
var str = cast[ptr String](self).toStr()
|
||||||
|
for c in str:
|
||||||
|
if not c.isDigit():
|
||||||
|
result.kind = returnTypes.Exception
|
||||||
|
result.result = newTypeError(&"invalid literal for int: '{str}'")
|
||||||
|
return
|
||||||
var intVal: int
|
var intVal: int
|
||||||
discard parseInt(cast[ptr String](self).toStr(), intVal)
|
discard parseInt(str, intVal)
|
||||||
result.result = intVal.asInt()
|
result.result = intVal.asInt()
|
||||||
of ObjectType.Float:
|
of ObjectType.Float:
|
||||||
var floatVal: float64
|
var floatVal: float64
|
||||||
discard (parseFloat(cast[ptr Float](self).stringify(), floatVal))
|
discard (parseFloat(cast[ptr Float](self).stringify(), floatVal))
|
||||||
result.result = int(floatVal).asInt()
|
result.result = int(floatVal).asInt()
|
||||||
|
@ -447,6 +454,22 @@ proc objAs*(self: ptr Obj, other: ObjectType): returnType =
|
||||||
of ObjectType.Float:
|
of ObjectType.Float:
|
||||||
case self.kind:
|
case self.kind:
|
||||||
of ObjectType.String:
|
of ObjectType.String:
|
||||||
|
var str = cast[ptr String](self).toStr()
|
||||||
|
var seenDot = false
|
||||||
|
for c in str:
|
||||||
|
if not c.isDigit():
|
||||||
|
if c == '.':
|
||||||
|
if seenDot:
|
||||||
|
result.kind = returnTypes.Exception
|
||||||
|
result.result = newTypeError(&"invalid literal for float: '{str}'")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
seenDot = true
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
result.kind = returnTypes.Exception
|
||||||
|
result.result = newTypeError(&"invalid literal for float: '{str}'")
|
||||||
|
return
|
||||||
var floatVal: float64
|
var floatVal: float64
|
||||||
discard parseFloat(cast[ptr String](self).toStr(), floatVal)
|
discard parseFloat(cast[ptr String](self).toStr(), floatVal)
|
||||||
result.result = floatVal.asFloat()
|
result.result = floatVal.asFloat()
|
||||||
|
|
|
@ -18,10 +18,10 @@ const language = 1
|
||||||
|
|
||||||
when language == 1:
|
when language == 1:
|
||||||
const aa* = "ICBfX18gICAgX19fICAgX19fICBfX18gIF9fXyAgX19fICAgICAgIF9fICAgICAgX18gIF9fXyAgICBfX18gICBfX18gIF9fXyAgX19fICBfX18gCiAvIF8gXCAgLyBfIFwgfCBfIFwvIF9ffHxfIF98fCBfX3wgICAgICBcIFwgICAgLyAvIC8gXyBcICAvIF8gXCB8IF8gXC8gX198fF8gX3x8IF9ffAp8IChfKSB8fCAoXykgfHwgIF8vXF9fIFwgfCB8IHwgX3wgICAgICAgIFwgXC9cLyAvIHwgKF8pIHx8IChfKSB8fCAgXy9cX18gXCB8IHwgfCBffCAKIFxfX18vICBcX19fLyB8X3wgIHxfX18vfF9fX3x8X19ffCAgICAgICAgXF8vXF8vICAgXF9fXy8gIFxfX18vIHxffCAgfF9fXy98X19ffHxfX198Cgo="
|
const aa* = "ICBfX18gICAgX19fICAgX19fICBfX18gIF9fXyAgX19fICAgICAgIF9fICAgICAgX18gIF9fXyAgICBfX18gICBfX18gIF9fXyAgX19fICBfX18gCiAvIF8gXCAgLyBfIFwgfCBfIFwvIF9ffHxfIF98fCBfX3wgICAgICBcIFwgICAgLyAvIC8gXyBcICAvIF8gXCB8IF8gXC8gX198fF8gX3x8IF9ffAp8IChfKSB8fCAoXykgfHwgIF8vXF9fIFwgfCB8IHwgX3wgICAgICAgIFwgXC9cLyAvIHwgKF8pIHx8IChfKSB8fCAgXy9cX18gXCB8IHwgfCBffCAKIFxfX18vICBcX19fLyB8X3wgIHxfX18vfF9fX3x8X19ffCAgICAgICAgXF8vXF8vICAgXF9fXy8gIFxfX18vIHxffCAgfF9fXy98X19ffHxfX198Cgo="
|
||||||
|
|
||||||
const bb* = "VXd1IFdlIG1hZGUgYSBmKmNreSB3dWNreSEhIEEgd2l0dGxlIGYqY2tvIGJvaW5nbyE="
|
const bb* = "VXd1IFdlIG1hZGUgYSBmKmNreSB3dWNreSEhIEEgd2l0dGxlIGYqY2tvIGJvaW5nbyE="
|
||||||
const cc* = "VGhlIGNvZGUgbW9ua2V5cyBhdCBvdXIgaGVhZHF1YXJ0ZXJzIGFyZSB3b3JraW5nIFZFV1kgSEFXRCB0byBmaXggdGhpcyEK"
|
const cc* = "VGhlIGNvZGUgbW9ua2V5cyBhdCBvdXIgaGVhZHF1YXJ0ZXJzIGFyZSB3b3JraW5nIFZFV1kgSEFXRCB0byBmaXggdGhpcyEK"
|
||||||
|
|
||||||
|
|
||||||
proc getCurrentExceptionMessage*: string =
|
proc getCurrentExceptionMessage*: string =
|
||||||
when language == 1:
|
when language == 1:
|
||||||
echo decode aa
|
echo decode aa
|
||||||
|
|
|
@ -42,7 +42,7 @@ Modelines also have to be closed by a ']' character
|
||||||
on the end of this line. These lines may not contain
|
on the end of this line. These lines may not contain
|
||||||
whitespace before the opening '[' or "//[" nor after then ending
|
whitespace before the opening '[' or "//[" nor after then ending
|
||||||
']' characters. Inside the brackets, letters (case
|
']' characters. Inside the brackets, letters (case
|
||||||
insensitive), numbers, underscores and dashes form\
|
insensitive), numbers, underscores and dashes form
|
||||||
a name describing what the modeline does.
|
a name describing what the modeline does.
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -138,7 +138,7 @@ There are two kinds of source modes, raw and mixed.
|
||||||
Mixed source mode can be entered if the detail `mixed`
|
Mixed source mode can be entered if the detail `mixed`
|
||||||
is specified. Raw source mode can be entered if the
|
is specified. Raw source mode can be entered if the
|
||||||
detail `raw` is specified. When no detail is specified,
|
detail `raw` is specified. When no detail is specified,
|
||||||
raw source mode is entered.
|
raw source mode is assumed.
|
||||||
|
|
||||||
In raw source mode, all lines in the mode are
|
In raw source mode, all lines in the mode are
|
||||||
appended as they are to the JAPL source. In mixed
|
appended as they are to the JAPL source. In mixed
|
||||||
|
|
Loading…
Reference in New Issue