annotate core/src/luan/impl/$Luan.java @ 649:37f0cf43f191

UnaryExpr now compiled
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 30 Mar 2016 22:42:27 -0600
parents e387e4021afe
children d658eab7bf4c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
648
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.impl;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.util.List;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
4 import java.util.ArrayList;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
5 import luan.Luan;
649
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
6 import luan.LuanState;
648
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 import luan.LuanTable;
649
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
8 import luan.LuanFunction;
648
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 import luan.LuanException;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 public final class $Luan {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
13 private $Luan() {} // never
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 private static List<Expressions> listExpressions = new ArrayList<Expressions>();
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 static int addExpressions(Expressions exp) {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19 int i = listExpressions.size();
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20 listExpressions.add(exp);
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 return i;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 }
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 public static Expressions getExpressions(int i) {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 return listExpressions.get(i);
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 }
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29 public static Object first(Object obj) {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 return Luan.first(obj);
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 }
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32
649
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
33 public static int len(LuanState luan,Object o) throws LuanException {
648
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 if( o instanceof String ) {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 String s = (String)o;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 return s.length();
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 }
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 if( o instanceof byte[] ) {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 byte[] a = (byte[])o;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 return a.length;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 }
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 if( o instanceof LuanTable ) {
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 LuanTable t = (LuanTable)o;
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 return t.length(luan);
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 }
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
46 throw new LuanException( "attempt to get length of a " + Luan.type(o) + " value" );
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 }
649
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
48
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
49 public static Object unm(LuanState luan,Object o) throws LuanException {
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
50 if( o instanceof Number )
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
51 return -((Number)o).doubleValue();
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
52 if( o instanceof LuanTable ) {
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
53 LuanFunction fn = Luan.getHandlerFunction("__unm",(LuanTable)o);
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
54 if( fn != null ) {
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
55 return Luan.first(fn.call(luan,new Object[]{o}));
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
56 }
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
57 }
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
58 throw new LuanException("attempt to perform arithmetic on a "+Luan.type(o)+" value");
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
59 }
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
60
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
61 public static Boolean not(Object o) throws LuanException {
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
62 return !Luan.checkBoolean(o);
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
63 }
37f0cf43f191 UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents: 648
diff changeset
64
648
e387e4021afe start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
65 }