K. Lange
997e1a8d2a
length should determine truthiness where relevent
2021-01-09 13:58:46 +09:00
K. Lange
656942f612
Cleanup and useful builtins
2021-01-09 10:12:50 +09:00
K Lange
2bd0d93596
Add kuroko.argv
2021-01-08 19:05:11 +09:00
K. Lange
070b4bc356
Add tuple unpacking and 'if' conditions to list comprehensions
2021-01-08 18:00:49 +09:00
K. Lange
fc05327c42
Support unpacking tuples in for ... in ... loops.
2021-01-08 17:42:57 +09:00
K. Lange
8f9c1a4c1d
Switch C-style loops to semicolons before I regret having used commas
2021-01-08 17:14:42 +09:00
K. Lange
3735b9c16b
Raise KeyboardInterrupt on ^C
2021-01-08 16:40:43 +09:00
K. Lange
f21a959b14
Add instructions for static builds
2021-01-08 12:12:44 +09:00
K. Lange
cdd3272d0e
Accept tabs as being equivalent to eight spaces, but no mixing on a single line
2021-01-08 07:05:33 +09:00
K Lange
a1fbaecabd
Readme and doc updates
2021-01-07 22:45:52 +09:00
K. Lange
9eb5fb1cad
Add ternary (a) if (cond) else (b)
2021-01-07 14:04:42 +09:00
K. Lange
ecb5f1e4ec
Attach __doc__ to modules, default to None (but still set) if missing
2021-01-07 11:30:10 +09:00
K. Lange
8a1de6c4d2
Assign __main__ as name of executed scripts
2021-01-07 10:58:04 +09:00
K. Lange
fbf4dda818
Fix tracking what should be 'global' through function calls?
2021-01-07 10:39:09 +09:00
K. Lange
902d2222b5
Make modules work like in Python. TODO: module class for better repring
2021-01-07 09:50:58 +09:00
K. Lange
7073505c6b
fix test that includes pointer values in output
2021-01-06 19:07:22 +09:00
K. Lange
b4e4da667f
Add test for upvalue bug resolved yesterday
2021-01-06 14:51:07 +09:00
K. Lange
a4a4da70df
Fixup more kwargs stuff, need to pop values for defaults
2021-01-05 19:01:26 +09:00
K. Lange
181e378628
Add class name to method __repr__
2021-01-05 15:36:09 +09:00
K Lange
ff8ed02ebd
Make print() a function before it's too late
2021-01-04 23:34:10 +09:00
K. Lange
d87fd9b1bd
Commit results of test cases as of now (not sure if they're all correctly)
2021-01-04 21:50:20 +09:00
K. Lange
bc12529e75
Fix some test cases for expect testing
2021-01-04 21:44:16 +09:00
K. Lange
e5a1756543
Remove some tests that make too much output
2021-01-04 21:43:51 +09:00
K. Lange
feeaa30d11
Fix missing comma in test case for whitespace eating
2021-01-04 21:23:55 +09:00
K. Lange
5c1d8f24b6
more AOC test cases
2021-01-04 20:27:32 +09:00
K. Lange
f4cbf2ec38
this is now a late AOC2020 repo
2021-01-04 20:10:39 +09:00
K. Lange
6195649458
More test scripts
2021-01-04 19:59:11 +09:00
K. Lange
f1ebada908
Add string iterators
2021-01-04 19:34:56 +09:00
K. Lange
7b8df5d4da
More test files
2021-01-04 19:07:46 +09:00
K. Lange
3fd9bfecde
Demonstrate how Python's default args behavior can be emulated
2021-01-04 10:02:44 +09:00
K. Lange
90a4dd678d
Ignore line feeds and indentation in some contexts
2021-01-04 09:49:56 +09:00
K. Lange
7dfa32f471
Fix some exceptional edge cases
2021-01-03 18:26:55 +09:00
K. Lange
2ee154ecf7
Add argument expansions...
2021-01-03 18:13:17 +09:00
K. Lange
36716e3508
Support * and ** in function signatures for collections of additional arguments and keyword args
2021-01-03 16:02:50 +09:00
K. Lange
8ad29f7891
Ditch character literals and add single, triple strings
2021-01-03 14:09:45 +09:00
K. Lange
76e70b79d0
Add default argument values.
...
Unlike in Python, I'm taking the approach of evaluating these at function
call time rather than definition time. Assigning things like empty lists/dicts
to default arguments has always been a ridiculous thing in Python, and I don't
want to make that mistake. I'm pretty sure Python only continues to do that
because it was something they didn't want to break for backwards compatibility
reasons even in Python 3.
2021-01-03 12:32:04 +09:00
K. Lange
e46d753999
Basic support for keyword arguments when calling functions.
2021-01-03 12:09:41 +09:00
K. Lange
0966a21c7a
Move sleep, uname to Pythonic module names
2021-01-03 09:49:19 +09:00
K. Lange
93af369b8c
Quietly pretend we didn't just do that different from Python for no reason
2021-01-03 09:29:09 +09:00
K. Lange
b676df69da
Add method decorators
...
This required a new approach for handling function arguments.
Methods remain the same: the callee object is on the stack and positioned
to be "argument 0". Non-methods have changed so that "argument 0" is the
first argument, with the function still remaining before that. When a
non-method is called, we track this fact so that we can continue to restore
the stack to the correct height to get rid of the function. This allows
a method decorator to be defined exactly like it would be in Python
def methodDecorator(func):
def wrappedMethod(instance, someOtherArg):
print "Do something with the arg:", someOtherArg
func(instance)
class Foo():
@methodDecorator
def func():
print "I only take an implicit self:", self
let f = Foo()
f.func("but that other arg is needed")
2021-01-03 08:43:32 +09:00
K. Lange
1de1fbc150
Basic non-method decorator support?
2021-01-02 21:58:24 +09:00
K. Lange
542e219192
Redefine list comprehension and add infix in
2021-01-02 19:46:21 +09:00
K. Lange
7b506e6190
actually use OP_CALL_LONG
2021-01-02 12:52:12 +09:00
K. Lange
9211b04fc1
Add 'else if'; don't do Python's elif thing, I don't like that.
2021-01-02 12:13:01 +09:00
K. Lange
ae2e2be15d
do something more straightforward and useful for methods on non-objects
2021-01-01 16:02:16 +09:00
K. Lange
9a370f00e1
Add continue/break statements
2020-12-31 16:59:51 +09:00
K. Lange
0b2c9df58f
shove list comprehensions into their own fake call frames because everything is terrible
2020-12-30 22:30:09 +09:00
K. Lange
33f7561076
List comprehensions, and several gc+scoping fixes along the way
2020-12-30 21:57:13 +09:00
K. Lange
a5928b18c9
bite the bullet and rename length() to __len__()
2020-12-30 15:50:26 +09:00
K. Lange
b0c2772937
switch some type conversions to bound methods
2020-12-29 16:40:42 +09:00
K. Lange
2c18402d40
escape sequences in strings
2020-12-29 16:26:00 +09:00
K. Lange
a0d52a61f2
add an exception mechanism
2020-12-29 11:00:12 +09:00
K. Lange
ba73f5a32a
move stray test into test/
2020-12-29 08:25:36 +09:00
K. Lange
0f7bc84ad3
for loops must open a new scope around their blocks as well or they won't pop locals before the loop finishes
2020-12-29 08:23:18 +09:00
K Lange
e9261a2f56
change size of integers to long
2020-12-28 16:32:40 +09:00
K. Lange
3ba8025eeb
lots of fixups so we can create dicts from the vm
2020-12-28 20:38:26 +09:00
K. Lange
cdcbf6cf54
First pass at module/builtin cleanup
2020-12-28 19:01:28 +09:00