- Regard
{ ... }
as@{ ... }()
now - Edit CMakeLists.txt to support MacOS simply
- Fix code bug when
std::size_t
is not same tostd::uint64_t
- Fix bug when inputting
;;;
in the REPL
- Improve declaration with new syntax
@[a, b], c: [1, 2], 3;
, see FEATURE#50 - Empty parameters can be omitted. For example,
@: 42
is a lambda expression
return val1, val2;
equalsreturn [val1, val2];
now- Use
=> expr
instead of} else expr
for the else-expr of match-expr, see FEATURE#33 - Returning multi values in lambda-expression must be explicit by writing
[ret1, ..., retn]
, see FEATURE#54
- Discard feature direct-return-multi-value, see DISCARD#49
- Disable using single statement as block by
, stmt;
- Make sure that all files will be executed once if default
- Only Anole modules can be imported by simple name now
- Cpp modules must be imported by using their direct paths
- Instruction
ImportAll
is unary operation now
- Improve the performance of REPL
- Improve the error information of non-defined variables which may cause segmentation fault
- Make sure all paths could be finded correctly
- Support using sub-modules/components directly now, see ENHANCEMENT#27
- Fix the bug caused by no-block-scope when using nested foreach-stmt, see more in BUG#40
- Remove instruction
ImportAllPath
- Instructions
EndScope/BuildClass
for creating class-objects - New builtin objects such as ClassObject, InstanceObject and MethodObject to support OOP
- Support OOP mentioned in PROPOSAL#20 now!!!
- Instruction
FastPop
to replace oldPop
- Enable calling ctors inherited from base classes by using
bctors
in__init__
- Return statement can return nothing now by
return ;
- Instruction
Pop
will pop the number determined by CallAc
- Improve parser by modifying a few redundant structures
- Use include-guards instead of
#pragma once
which was mentioned in ENHANCEMENT#22
- Fix bug in checking type of token
- Remove OLD things about class such as class-declaration, new-expression and so on
- Apply the new design of GC mentioned in issue-13 and fix the bug mentioned in issue-14 in consequence
- Support block comment by using a pair of '$'
- Context uses clearer interfaces
push*/pop*
- Modify the directory structure of Anole
- Fix bug about GC when calling function-like objects
- Anole has GC now!!!
- Built-in function
type
to get the type literal of the given value
- Default
=
and!=
will compare address of given objects directly
- Custom objects in module can add their own types and the corresponding literals
- Add magic number in the head of .ir file to stand for the version of IR
- Add command-line argument
--version
to print the version of anole
- Support use direct path of module like
use * from "/path/to/module"
,use "/path/to/module" as mod
anduse part as alias from "/path/to/module"
- Instructions
ImportPath/ImportAllPath
to use module with its path directly - Instructions
ReturnAc/Return
to hold all return situations - Instruction
FastCall
for call expression without arguments - Instruction
ReturnNone
for implicit return none
- Dict will create an empty target if the given key is not recorded
- Rename Instructions
CallExAnchor/CallEx
toCallAc/Call
- Remove old Instructions
Call/CallTail/CallExTail/Return
because call expression may return multi values and there are many complex situation
- Support multi ret-vals such as
return expr1, ..., exprn
,@(): expr1, ..., exprn
- Supoprt multi vars-decl like
@var1, ..., varn
or@var1, ..., varn: expr1, ..., exprn
- Multi ret-vals will be flated on where the call expr appears. For example,
return ..., foo(...)
is equivalent toreturn ..., expr1, ..., exprn
afterfoo(...)
is called. The call expr with multi ret-vals also can appear in multi vars-decl and as argument of other function, and then it will be flated also - Enale prefix operator receiving call expr with multi-ret-vals like
cstm_preop foo(...)
withfoo(...): expr1, ..., exprn
- Ins
Return
has an oprand for the number of values to return now - Enable packed parameter be reference as
...&name
, notice that it is an old feature and just not mention before
- Use gtest instead of the old simple test to make test
- Builtin function will get the number of arguments when it is called
- Paramemter without default value cannot follow parameter with default value
- Packed parameter should be the last parameter in function declaration
- Update grammar for packed parameter from
name...
to...name
- Instructions
CallEx/CallExTail
for call with unpacked argument - Add check when calling with less arguments
- Instruction
CallAnchor
is renamed toCallExAnchor
- Instructions
Call/CallTail
have a oprand for the number of arguments - No default value for parameter which is not given now, it is none in the past
- Packed parameter will be empty list if it is not given arguments
- Packed parameter cannot have default value now
- Delay expression can store its computed value now
- Use
dict {}
instead of '{}' for dict expr, '{}' will be considered as lambda expression with no parameters - Support variadic parameters and arguments with
...
- Call/CallTail without arguments number now
- New insturctions
Pack/Unpack
for variadic parameters and arguments - New instruction
ThunkOver
to support storing computed value for delay expression
- Support use list in foreach statement directly
- Method to_str for integer object
- Fix bug that old eval function which will skip the first opcode
- Fix bug in parsing user defined unary operators
- Binary operators are left-associative instead of right-associative now
- Built-in method will contain a shared pointer of its object
- Insturction AddPrefixOp to make identifier as prefix operator
- Support custom unary operators now
- Rewrite some code to make anole faster
- Use ObjectType instead of dynamic_cast to distinguish different objects
- Default compile mode is static now
- Context can traceback to the correct origin when meeting compile-error in REPL mode
- Instruction ScopeEnd
- Remove support of block scope new :(
- Instruction
StoreRef
- Support pass-by-reference now with syntax
@(¶meter) { ... }
- Support declare a variable as reference
- Function will return the reference instead of rebinding the object to a temporary variable
- Keyboard interrupt will cancel the inputing of current statement instead of current line
- Fix bug when module's code has definitions of custom operators, actions are interpreting each statement immediately after it is parsed instead of interpreting statements after all are parsed
- Insturction AddInfixOp to make identifier as infix operator
- Support custom operators and priorities
- Demo to define custom operators
- The non-REPL will interpret statement while it is parsed instead of execute after parsing all statements
- Rename to Anole
- Complete the codegen of
foreach
- Add the example of using
foreach
- Use unique_ptr instead of shared_ptr in AST
- Remove the old support for
for stmt
- Remove old testers for tokenizer and parser
- IR will be stored as *.icei
- Code will unserialize from the IR file if the IR file is newer than the corresponding source file
- Fix bug that context cannot traceback when interpreting modules
- Support traceback when meeting runtime error
- CompileError/RuntimeError to distinguish the two exceptions
- Runtime error will show the running position
- Methods tellg/tellp, seekg/seekp, good and eof for fileobject
- Support enum { [ident [: integer]]* }
- Coroutine as a library now rather than the example
- Suffix from .anole to .icec
- Support history at REPL mode
- Prompt undefined symbol with its name
- Directory
lib/
for standard libraries - Add standard library
file
- Instructions to support binary operations now
- Parser could parse binary operations now
- Console will wait for new input after inputing
Ctrl ^ C
- Exit rather than infinite loop when receiving
Ctrl ^ D
- Fix bug in modules finding
- Keyword
from
to use inuse
stmt - Instruction
Import
,ImportPart
andImportAll
to support use statement
- Update
use ident
touse (ident [as ident]) [, ident [as ident]]* [from (ident)]
oruse * from (ident)
- Use statement can import module from .so files
- Module can be defined as a directory
- Instruction
Use
- This ChangeLog file to document changes of Anole
- The origin ChangeLog in README.md
- The Samples.md, because I plan to write some docs later and you can learn something about how to use Anole by examples in example/
- Groundbreak! Everything already exists!