on master help sign in
javascript: added more primitives
commit9b75fadc50029170e1b92bab2eaf7f0c9c99e15d authorraichoo <raichoo@googlemail.com> dateThu 17 Jan 2013, 20:06 (14 years ago) parent3267cad
1 file changed+91−30
src/IRTS/CodegenJavaScript.hs+91−30
src/IRTS/CodegenJavaScript.hs+91−30
@@ -1,7 +1,8 @@
11{-# LANGUAGE PatternGuards #-}
22
33{-
4− BigInteger Javascript code taken from https://github.com/peterolson/BigInteger.js
4+ BigInteger Javascript code taken from:
5+ https://github.com/peterolson/BigInteger.js
56-}
67
78module IRTS.CodegenJavaScript (codegenJavaScript) where
@@ -258,25 +259,18 @@ translateExpression _ (SOp op vars)
258259 , (lhs:rhs:_) <- vars = translateBinaryOp ">" lhs rhs
259260 | LGe <- op
260261 , (lhs:rhs:_) <- vars = translateBinaryOp ">=" lhs rhs
261−
262− | LFPlus <- op
263− , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
264− | LFMinus <- op
265− , (lhs:rhs:_) <- vars = translateBinaryOp "-" lhs rhs
266− | LFTimes <- op
267− , (lhs:rhs:_) <- vars = translateBinaryOp "*" lhs rhs
268− | LFDiv <- op
269− , (lhs:rhs:_) <- vars = translateBinaryOp "/" lhs rhs
270− | LFEq <- op
271− , (lhs:rhs:_) <- vars = translateBinaryOp "==" lhs rhs
272− | LFLt <- op
273− , (lhs:rhs:_) <- vars = translateBinaryOp "<" lhs rhs
274− | LFLe <- op
275− , (lhs:rhs:_) <- vars = translateBinaryOp "<=" lhs rhs
276− | LFGt <- op
277− , (lhs:rhs:_) <- vars = translateBinaryOp ">" lhs rhs
278− | LFGe <- op
279− , (lhs:rhs:_) <- vars = translateBinaryOp ">=" lhs rhs
262+ | LAnd <- op
263+ , (lhs:rhs:_) <- vars = translateBinaryOp "&" lhs rhs
264+ | LOr <- op
265+ , (lhs:rhs:_) <- vars = translateBinaryOp "|" lhs rhs
266+ | LXOr <- op
267+ , (lhs:rhs:_) <- vars = translateBinaryOp "^" lhs rhs
268+ | LSHL <- op
269+ , (lhs:rhs:_) <- vars = translateBinaryOp "<<" rhs lhs
270+ | LSHR <- op
271+ , (lhs:rhs:_) <- vars = translateBinaryOp ">>" rhs lhs
272+ | LCompl <- op
273+ , (arg:_) <- vars = "~" ++ translateVariableName arg
280274
281275 | LBPlus <- op
282276 , (lhs:rhs:_) <- vars = translateBinaryOp ".add(" lhs rhs ++ ")"
@@ -298,24 +292,91 @@ translateExpression _ (SOp op vars)
298292 , (lhs:rhs:_) <- vars = translateBinaryOp ".greater(" lhs rhs ++ ")"
299293 | LBGe <- op
300294 , (lhs:rhs:_) <- vars = translateBinaryOp ".greaterOrEquals(" lhs rhs ++ ")"
295+
296+ | LFPlus <- op
297+ , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
298+ | LFMinus <- op
299+ , (lhs:rhs:_) <- vars = translateBinaryOp "-" lhs rhs
300+ | LFTimes <- op
301+ , (lhs:rhs:_) <- vars = translateBinaryOp "*" lhs rhs
302+ | LFDiv <- op
303+ , (lhs:rhs:_) <- vars = translateBinaryOp "/" lhs rhs
304+ | LFEq <- op
305+ , (lhs:rhs:_) <- vars = translateBinaryOp "==" lhs rhs
306+ | LFLt <- op
307+ , (lhs:rhs:_) <- vars = translateBinaryOp "<" lhs rhs
308+ | LFLe <- op
309+ , (lhs:rhs:_) <- vars = translateBinaryOp "<=" lhs rhs
310+ | LFGt <- op
311+ , (lhs:rhs:_) <- vars = translateBinaryOp ">" lhs rhs
312+ | LFGe <- op
313+ , (lhs:rhs:_) <- vars = translateBinaryOp ">=" lhs rhs
314+
315+ | LStrConcat <- op
316+ , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
317+ | LStrEq <- op
318+ , (lhs:rhs:_) <- vars = translateBinaryOp "==" lhs rhs
319+ | LStrLt <- op
320+ , (lhs:rhs:_) <- vars = translateBinaryOp "<" lhs rhs
321+
322+ | LStrInt <- op
323+ , (arg:_) <- vars = "parseInt(" ++ translateVariableName arg ++ ")"
324+ | LIntStr <- op
325+ , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ")"
326+ | LIntBig <- op
327+ , (arg:_) <- vars = "__IDR__.bigint(" ++ translateVariableName arg ++ ")"
328+ | LBigInt <- op
329+ , (arg:_) <- vars = translateVariableName arg ++ ".valueOf()"
301330 | LBigStr <- op
302331 , (arg:_) <- vars = translateVariableName arg ++ ".toString()"
332+ | LStrBig <- op
333+ , (arg:_) <- vars = "__IDR__.bigint(" ++ translateVariableName arg ++ ")"
334+ | LFloatStr <- op
335+ , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ")"
336+ | LStrFloat <- op
337+ , (arg:_) <- vars = "parseFloat(" ++ translateVariableName arg ++ ")"
338+ | LIntFloat <- op
339+ , (arg:_) <- vars = translateVariableName arg
340+ | LFloatInt <- op
341+ , (arg:_) <- vars = translateVariableName arg
342+
343+ | LFExp <- op
344+ , (arg:_) <- vars = "Math.exp(" ++ translateVariableName arg ++ ")"
345+ | LFLog <- op
346+ , (arg:_) <- vars = "Math.log(" ++ translateVariableName arg ++ ")"
347+ | LFSin <- op
348+ , (arg:_) <- vars = "Math.sin(" ++ translateVariableName arg ++ ")"
349+ | LFCos <- op
350+ , (arg:_) <- vars = "Math.cos(" ++ translateVariableName arg ++ ")"
351+ | LFTan <- op
352+ , (arg:_) <- vars = "Math.tan(" ++ translateVariableName arg ++ ")"
353+ | LFASin <- op
354+ , (arg:_) <- vars = "Math.asin(" ++ translateVariableName arg ++ ")"
355+ | LFACos <- op
356+ , (arg:_) <- vars = "Math.acos(" ++ translateVariableName arg ++ ")"
357+ | LFATan <- op
358+ , (arg:_) <- vars = "Math.atan(" ++ translateVariableName arg ++ ")"
359+ | LFSqrt <- op
360+ , (arg:_) <- vars = "Math.sqrt(" ++ translateVariableName arg ++ ")"
361+ | LFFloor <- op
362+ , (arg:_) <- vars = "Math.floor(" ++ translateVariableName arg ++ ")"
363+ | LFCeil <- op
364+ , (arg:_) <- vars = "Math.ceil(" ++ translateVariableName arg ++ ")"
303365
366+ | LStrCons <- op
367+ , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
304368 | LStrHead <- op
305369 , (arg:_) <- vars = translateVariableName arg ++ "[0]"
370+ | LStrRev <- op
371+ , (arg:_) <- vars = let v = translateVariableName arg in
372+ v ++ "split('').reverse().join('')"
373+ | LStrIndex <- op
374+ , (lhs:rhs:_) <- vars = let l = translateVariableName lhs
375+ r = translateVariableName rhs in
376+ l ++ "[" ++ r ++ "]"
306377 | LStrTail <- op
307378 , (arg:_) <- vars = let v = translateVariableName arg in
308379 v ++ ".substr(1," ++ v ++ ".length-1)"
309− | LStrConcat <- op
310− , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
311− | LStrEq <- op
312− , (lhs:rhs:_) <- vars = translateBinaryOp "==" lhs rhs
313− | LStrCons <- op
314− , (lhs:rhs:_) <- vars = translateBinaryOp "+" lhs rhs
315−
316− | LIntStr <- op
317− , (arg:_) <- vars = "String(" ++ translateVariableName arg ++ ");"
318−
319380 where
320381 translateBinaryOp :: String -> LVar -> LVar -> String
321382 translateBinaryOp f lhs rhs =