on master help sign in
javascript: quick & dirty compile time error on invalid FFI
ce2f85fraichoo
src/IRTS/CodegenJavaScript.hs+4−4
@@ -100,18 +100,18 @@ data FFI = FFICode Char | FFIArg Int | FFIError String
100ffi :: String -> [String] -> String
100ffi :: String -> [String] -> String
101ffi code args = let parsed = ffiParse code in
101ffi code args = let parsed = ffiParse code in
102 case ffiError parsed of
102 case ffiError parsed of
103− Just err -> compileJS $ jsError err
103+ Just err -> error err
104 Nothing -> renderFFI parsed args
104 Nothing -> renderFFI parsed args
105 where
105 where
106 ffiParse :: String -> [FFI]
106 ffiParse :: String -> [FFI]
107 ffiParse "" = []
107 ffiParse "" = []
108− ffiParse ['%'] = [FFIError "Invalid positional argument"]
108+ ffiParse ['%'] = [FFIError $ "FFI - Invalid positional argument"]
109 ffiParse ('%':'%':ss) = FFICode '%' : ffiParse ss
109 ffiParse ('%':'%':ss) = FFICode '%' : ffiParse ss
110 ffiParse ('%':s:ss)
110 ffiParse ('%':s:ss)
111 | isDigit s =
111 | isDigit s =
112 FFIArg (read $ s : takeWhile isDigit ss) : ffiParse (dropWhile isDigit ss)
112 FFIArg (read $ s : takeWhile isDigit ss) : ffiParse (dropWhile isDigit ss)
113 | otherwise =
113 | otherwise =
114− [FFIError "Invalid positional argument"]
114+ [FFIError $ "FFI - Invalid positional argument"]
115 ffiParse (s:ss) = FFICode s : ffiParse ss
115 ffiParse (s:ss) = FFICode s : ffiParse ss
116
116
117
117
@@ -126,7 +126,7 @@ ffi code args = let parsed = ffiParse code in
126 renderFFI ((FFICode c) : fs) args = c : renderFFI fs args
126 renderFFI ((FFICode c) : fs) args = c : renderFFI fs args
127 renderFFI ((FFIArg i) : fs) args
127 renderFFI ((FFIArg i) : fs) args
128 | i < length args && i >= 0 = args !! i ++ renderFFI fs args
128 | i < length args && i >= 0 = args !! i ++ renderFFI fs args
129− | otherwise = "Argument index out of bounds"
129+ | otherwise = error "FFI - Argument index out of bounds"
130
130
131
131
132compileJS :: JS -> String
132compileJS :: JS -> String