aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation
diff options
context:
space:
mode:
authorEduardo Julian2017-11-14 20:03:14 -0400
committerEduardo Julian2017-11-14 20:03:14 -0400
commitb88027c19181f24584d5ad1c46fb2443d65edece (patch)
treeae6ce4b8cc4dab3a5b05e9e9759df041509c4113 /new-luxc/source/luxc/lang/translation
parent686a46f569b818681583e6ce75b37b25642b375b (diff)
- Fixed some bugs.
- new-luxc can now fully compile lux.lux!
Diffstat (limited to 'new-luxc/source/luxc/lang/translation')
-rw-r--r--new-luxc/source/luxc/lang/translation/loop.jvm.lux4
-rw-r--r--new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux5
-rw-r--r--new-luxc/source/luxc/lang/translation/runtime.jvm.lux23
3 files changed, 28 insertions, 4 deletions
diff --git a/new-luxc/source/luxc/lang/translation/loop.jvm.lux b/new-luxc/source/luxc/lang/translation/loop.jvm.lux
index d9216f1a7..6e51d7eed 100644
--- a/new-luxc/source/luxc/lang/translation/loop.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/loop.jvm.lux
@@ -25,7 +25,7 @@
(do meta;Monad<Meta>
[[@begin offset] hostL;anchor
argsI (monad;map @ (function [[register argS]]
- (let [register' (n.+ offset register)]
+ (let [register' (|> register (n.+ offset))]
(: (Meta $;Inst)
(case argS
(^multi (^code ((~ [_ (#;Int var)])))
@@ -50,7 +50,7 @@
(do meta;Monad<Meta>
[@begin $i;make-label
initsI+ (monad;map @ translate initsS+)
- bodyI (hostL;with-anchor [@begin offset]
+ bodyI (hostL;with-anchor [@begin (n.inc offset)]
(translate bodyS))
#let [initializationI (|> (list;enumerate initsI+)
(list/map (function [[register initI]]
diff --git a/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux b/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux
index e680c46e8..9fd2df62f 100644
--- a/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux
@@ -58,6 +58,7 @@
## [Utils]
(def: $Object $;Type ($t;class "java.lang.Object" (list)))
(def: $Object-Array $;Type ($t;array +1 $Object))
+(def: $Variant $;Type ($t;array +1 $Object))
(def: $String $;Type ($t;class "java.lang.String" (list)))
(def: $CharSequence $;Type ($t;class "java.lang.CharSequence" (list)))
(def: $Function $;Type ($t;class hostL;function-class (list)))
@@ -408,8 +409,8 @@
($i;INVOKEVIRTUAL "java.lang.String" "contains" ($t;method (list $CharSequence) (#;Some $t;boolean) (list)) false)
($i;wrap #$;Boolean)]
[text//char ($i;CHECKCAST "java.lang.String") jvm-intI
- ($i;INVOKESTATIC hostL;runtime-class "text_char" ($t;method (list $String $t;int) (#;Some $t;int) (list)) false)
- lux-intI]
+ ($i;INVOKESTATIC hostL;runtime-class "text_char" ($t;method (list $String $t;int) (#;Some $Variant) (list)) false)
+ id]
)
(do-template [<name> <pre-subject> <pre-param> <pre-extra> <op>]
diff --git a/new-luxc/source/luxc/lang/translation/runtime.jvm.lux b/new-luxc/source/luxc/lang/translation/runtime.jvm.lux
index 0a330ab73..cc17014e1 100644
--- a/new-luxc/source/luxc/lang/translation/runtime.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/runtime.jvm.lux
@@ -386,6 +386,28 @@
$i;DRETURN)))
)))
+(def: text-methods
+ $;Def
+ (|>. ($d;method #$;Public $;staticM "text_char" ($t;method (list $String $t;int) (#;Some $Variant) (list))
+ (let [get-charI (|>. ($i;ALOAD +0)
+ ($i;ILOAD +1)
+ ($i;INVOKEVIRTUAL "java.lang.String" "codePointAt" ($t;method (list $t;int) (#;Some $t;int) (list)) false)
+ $i;I2L
+ ($i;wrap #$;Long))]
+ (<| $i;with-label (function [@from])
+ $i;with-label (function [@to])
+ $i;with-label (function [@handler])
+ (|>. ($i;try @from @to @handler "java.lang.Exception")
+ ($i;label @from)
+ get-charI
+ someI
+ $i;ARETURN
+ ($i;label @to)
+ ($i;label @handler)
+ noneI
+ $i;ARETURN))))
+ ))
+
(def: pm-methods
$;Def
(let [tuple-sizeI (|>. ($i;ALOAD +0) $i;ARRAYLENGTH)
@@ -564,6 +586,7 @@
nat-methods
frac-methods
deg-methods
+ text-methods
pm-methods
io-methods))]
_ (commonT;store-class hostL;runtime-class bytecode)]