Skip to content

Releases: sjbarag/brs

BRS v0.13.0

12 Jun 23:01
Compare
Choose a tag to compare
BRS v0.13.0 Pre-release
Pre-release

So many things I don't even know where to start.

  • more parser fixes than I can count
  • programmatic error emissions from the lexer, preprocessor, and parser
  • support for manifest parsing and conditional compilation directives like #if
  • runtime support for:
    • FormatJson/ParseJson
    • += operators (and similar)
    • ++ and -- operators
    • hex literals
    • type designators
    • the global LINE_NUM variable
    • the RoRegex BrightScript component
    • the RoTimespan BrightScript component

❤️ Contributors (sorted by username) ❤️

Thanks for all your help, everyone! I couldn't do this without each and every one of you.

💚 Special Thanks 💚

As with 0.11, @hulu generated some developer time to help accelerate this project's development. Many of this version's contributors are Hulugans — thanks to everyone at work who helped make this happen!

BRS 0.12.0

18 Dec 23:09
Compare
Choose a tag to compare
BRS 0.12.0 Pre-release
Pre-release

12 pounds of changes in a 5-pound box!

  • Numerous lexer and parser fixes to expand the set of valid code (brings this closer to RBI)
  • Support for multiple brightscript files on the commandline!
  • A bunch of global functions!
    • Type
    • StrToI
    • File IO functions (only for the tmp: scheme for now, and in an in-memory filesystem)
      • ReadAsciiFile
      • WriteAsciiFile (only for the tmp: scheme for now, and in an in-memory filesystem)
      • ListDir
      • CopyFile
      • MoveFile
      • DeleteFile
      • DeleteDirectory
      • CreateDirectory
      • FormatDrive (just a stub)
    • CreateObject (only "roArray" and "roAssociateArray" are supported so far)
  • Methods on roArray and roAssociativeArray instances! Specifically:
    • The ifArray interface for roArray
    • The ifAssociativeArray interface for roAssociativeArray
  • The main function is now automatically executed!
  • Conditional compilation directives (#if, #const, #error, etc.) are now supported. There's no support for manifest files just yet though!

❤️ Contributors ❤️

  • @strattonbrazil implemented multiple-file support and added all the File IO functions! Thanks Josh!
  • @jweeber implemented StrToI, CreateObject, and all the methods in ifAssociativeArray. Wowzer! Welcome to the project, Jess!

💚 Special Thanks 💚

@hulu (who employs me, @strattonbrazil, and @jweeber) was generous enough to donate a few developer-weeks to this project to accelerate its development. Thank you to everyone involved in letting that happen — we got a ton accomplished!

BRS 0.11.0

03 Dec 18:45
Compare
Choose a tag to compare
BRS 0.11.0 Pre-release
Pre-release

brs 0.11.0 is a much smaller release, but includes a much-needed feature that was missing from 0.10.0: the ability to set values in pre-existing arrays and associative arrays! The following is now possible:

a = [1, 2, 3]
a[0] = "one"

b = { foo: "bar" }
b.lorem = [ "ipsum", "dolor", "sit", "amet" ]

Version 0.11.0 also starts exporting some internals for other JavaScript consumers to use! For now that's just the lexer and the internal types, but more will be coming soon 🕛

BRS 0.10.0

29 Nov 03:54
Compare
Choose a tag to compare
BRS 0.10.0 Pre-release
Pre-release

brs 0.10 brings some significant improvements:

  • A whole bunch of global functions:
    • Str
    • StrI
    • Substitute
    • Val
    • Exp
    • Log
    • Sqr
    • Rnd
    • Atn
    • Cos
    • Sin
    • Tan
    • Abs
    • Cdbl
    • Cint
    • Csng
    • Fix
    • Int
    • Sgn
  • Overloads (and technically multiple dispatch) for standard-library functions
  • AssociativeArray literals and indexing into them (both the [] and . forms), e.g.:
    a = {
        foo: {
            bar: 1,
            baz: 2,
            "requires quotes": 3
        }
    }
    
    print a.foo["requires quotes"] ' prints 3
  • For-each loops across associative array keys
  • Heavily improved type-mismatch error messaging. New error messages look something like this:
    brs> UCase(5)
    [Line 1] Provided arguments don't match UCase's signature.
        function UCase(s as String) as String:
            * Argument 's' must be of type String, but received Integer.
    
  • Floating point math closer to the Reference BrightScript Interpreter (RBI)

❤️ Contributors ❤️

@strattonbrazil implemented 19 standard library functions. Wow!

BRS 0.9.0

01 Nov 03:17
Compare
Choose a tag to compare
BRS 0.9.0 Pre-release
Pre-release

brs 0.9 is a massive release, including:

  • New global string functions
    • Left
    • Mid
    • Right
    • Len
    • Instr
  • Named functions
  • Anonymous functions
  • Proper scoping for function bodies
  • Array literals
  • For-each loops
  • Array indexing
  • Maybe some other stuff that I've forgotten

I owe a huge thanks to the contributors of this project — you've made a very real impact to this runtime's progress!

❤️ Contributors ❤️

@gincwang implemented the global Left function!
@peteley implemented the global Len, Mid, Right, and Instr functions!

Thanks, you two! This project wouldn't be the same without you 😄

BRS 0.8.0

24 May 16:32
Compare
Choose a tag to compare
BRS 0.8.0 Pre-release
Pre-release

Version 0.8 of brs introduces a single — but extremely useful — feature: print lists! Instead of having to write several print statements on multiple lines (which in turn creates multiple output lines), brs users can now print the results of multiple expressions with a single line of code. For example, this is now valid:

' no separators
print "lorem " 1 "psum"

' arbitrary mixes of separators
print 9; " is equal to"; 3^2
print "column a", "column b", "column c", "column d"

' arbitrary tabbing
print tab(3) "I started at col 3"; tab(25) "I started at col 25"

' print position
print "0123" pos(0)

' calculate tabs based on position, though you'd probably want to just define "    " as a variable
print "lorem" tab(pos(0) + 4) "ipsum" tab(pos(0) + 4) "dolor" tab(pos(0) + 4) "sit" tab(pos(0) + 4) "amet"

' suppress trailing newline
print "no newline";

BRS 0.7.0

25 Apr 16:01
Compare
Choose a tag to compare
BRS 0.7.0 Pre-release
Pre-release

In version 0.7.0, brs learned quite a few new things:

  1. The Asc(string) and Chr(integer) global string functions have been added!
  2. Global function calls are now type-checked at runtime! Attempting to call Asc(false) or RebootSystem(1, 2, 3, 4, 5) will gracefully throw an error reporting the type mismatch.
  3. Runtime errors don't throw JavaScript stack traces anymore! At least I think I got them all.

❤️ Contributors ❤️

@strattonbrazil implemented Asc(string) and Chr(integer) for [email protected]. Thanks so much! 😃

BRS 0.6.1

06 Apr 01:07
2b24620
Compare
Choose a tag to compare
BRS 0.6.1 Pre-release
Pre-release

Fixes

  • Importing the brs JavaScript library with require("brs") or import * as brs from "brs"; now point to the correct main file instead of one that doesn't exist. (#37)

❤️ Contributors ❤️

Great catch, @Slushy!

BRS 0.6.0

04 Apr 03:53
Compare
Choose a tag to compare
BRS 0.6.0 Pre-release
Pre-release

In version 0.6.0, brs learned how to call global functions! There's only three starter functions for now, but adding more incrementally should be pretty easy after this:

  1. LCase(string): Accepts a string and returns its lowercase representation.
  2. UCase(string): Accepts a string and returns its uppercase representation.
  3. RebootSystem(): Warns you that it does nothing the first time you call it, then does nothing. 🎆

BRS 0.5.1

17 Mar 18:07
Compare
Choose a tag to compare
BRS 0.5.1 Pre-release
Pre-release

Fixes

  • Attempting to execute a non-existent or unreadable file no longer produces a JavaScript stack trace. There's now a helpful message and a system-level error code! (#21)

❤️ Contributors ❤️

Thanks for the fix, @strattonbrazil!