Mercurial Hosting > luan
comparison core/src/luan/Luan.java @ 171:3dcb0f9bee82
add core component
git-svn-id: https://luan-java.googlecode.com/svn/trunk@172 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Sun, 22 Jun 2014 05:41:22 +0000 |
parents | src/luan/Luan.java@9169581dc8fc |
children | 4edbf3204ca6 |
comparison
equal
deleted
inserted
replaced
170:7c792a328a83 | 171:3dcb0f9bee82 |
---|---|
1 package luan; | |
2 | |
3 import luan.modules.BasicLuan; | |
4 | |
5 | |
6 public final class Luan { | |
7 public static final String version = "Luan 0.1"; | |
8 | |
9 public static void main(String[] args) { | |
10 LuanState luan = LuanState.newStandard(); | |
11 try { | |
12 LuanFunction standalone = (LuanFunction)BasicLuan.load_file(luan,"java:luan/cmd_line.luan"); | |
13 luan.call(standalone,args); | |
14 } catch(LuanException e) { | |
15 System.err.println(e.getMessage()); | |
16 // e.printStackTrace(); | |
17 System.exit(-1); | |
18 } | |
19 } | |
20 | |
21 public static Object first(Object obj) { | |
22 if( !(obj instanceof Object[]) ) | |
23 return obj; | |
24 Object[] a = (Object[])obj; | |
25 return a.length==0 ? null : a[0]; | |
26 } | |
27 | |
28 public static Object[] array(Object obj) { | |
29 return obj instanceof Object[] ? (Object[])obj : new Object[]{obj}; | |
30 } | |
31 | |
32 public static String type(Object obj) { | |
33 if( obj == null ) | |
34 return "nil"; | |
35 if( obj instanceof String ) | |
36 return "string"; | |
37 if( obj instanceof Boolean ) | |
38 return "boolean"; | |
39 if( obj instanceof Number ) | |
40 return "number"; | |
41 if( obj instanceof LuanTable ) | |
42 return "table"; | |
43 if( obj instanceof LuanFunction ) | |
44 return "function"; | |
45 if( obj instanceof byte[] ) | |
46 return "binary"; | |
47 return "userdata"; | |
48 } | |
49 | |
50 public static boolean toBoolean(Object obj) { | |
51 return obj != null && !Boolean.FALSE.equals(obj); | |
52 } | |
53 | |
54 public static String asString(Object obj) { | |
55 if( obj instanceof String ) | |
56 return (String)obj; | |
57 if( obj instanceof Number ) | |
58 return toString((Number)obj); | |
59 return null; | |
60 } | |
61 | |
62 public static Number toNumber(Object obj) { | |
63 return toNumber(obj,null); | |
64 } | |
65 | |
66 public static Number toNumber(Object obj,Integer base) { | |
67 if( obj instanceof Number ) | |
68 return (Number)obj; | |
69 if( obj instanceof String ) { | |
70 String s = (String)obj; | |
71 try { | |
72 if( base==null ) | |
73 return Double.valueOf(s); | |
74 else | |
75 return Long.valueOf(s,base); | |
76 } catch(NumberFormatException e) {} | |
77 } | |
78 return null; | |
79 } | |
80 | |
81 public static String toString(Number n) { | |
82 if( n instanceof Integer ) | |
83 return n.toString(); | |
84 String s = n.toString(); | |
85 int iE = s.indexOf('E'); | |
86 String ending = null; | |
87 if( iE != -1 ) { | |
88 ending = s.substring(iE); | |
89 s = s.substring(0,iE); | |
90 } | |
91 if( s.endsWith(".0") ) | |
92 s = s.substring(0,s.length()-2); | |
93 if( ending != null ) | |
94 s += ending; | |
95 return s; | |
96 } | |
97 | |
98 public static Integer asInteger(Object obj) { | |
99 if( obj instanceof Integer ) | |
100 return (Integer)obj; | |
101 if( !(obj instanceof Number) ) | |
102 return null; | |
103 Number n = (Number)obj; | |
104 int i = n.intValue(); | |
105 return i==n.doubleValue() ? Integer.valueOf(i) : null; | |
106 } | |
107 | |
108 public static String toString(Object obj) { | |
109 if( obj == null ) | |
110 return "nil"; | |
111 if( obj instanceof Number ) | |
112 return Luan.toString((Number)obj); | |
113 if( obj instanceof LuanException ) { | |
114 LuanException le = (LuanException)obj; | |
115 return le.getMessage(); | |
116 } | |
117 if( obj instanceof byte[] ) | |
118 return "binary: " + Integer.toHexString(obj.hashCode()); | |
119 return obj.toString(); | |
120 } | |
121 | |
122 public static String stringEncode(String s) { | |
123 s = s.replace("\\","\\\\"); | |
124 s = s.replace("\u0007","\\a"); | |
125 s = s.replace("\b","\\b"); | |
126 s = s.replace("\f","\\f"); | |
127 s = s.replace("\n","\\n"); | |
128 s = s.replace("\r","\\r"); | |
129 s = s.replace("\t","\\t"); | |
130 s = s.replace("\u000b","\\v"); | |
131 s = s.replace("\"","\\\""); | |
132 return s; | |
133 } | |
134 | |
135 public static String repr(Object obj) { | |
136 if( obj == null ) | |
137 return "nil"; | |
138 if( obj instanceof Boolean ) | |
139 return Luan.toString((Boolean)obj); | |
140 if( obj instanceof Number ) | |
141 return Luan.toString((Number)obj); | |
142 if( obj instanceof String ) | |
143 return "\"" + stringEncode((String)obj) + "\""; | |
144 if( obj instanceof LuanRepr ) | |
145 return ((LuanRepr)obj).repr(); | |
146 return null; | |
147 } | |
148 | |
149 private Luan() {} // never | |
150 } |