PageRenderTime 39ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/Runtime/Dreaming/Reverie.cs

#
C# | 86 lines | 71 code | 5 blank | 10 comment | 10 complexity | 98ead73a9712818a142a70bbbd974a75 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using Refl.Extensions;
  4. namespace Refl.Dreaming
  5. {
  6. /// <summary>
  7. /// Provides ready to use Dream functionality, including the most commonly used assembly references and usings.
  8. /// </summary>
  9. public class Reverie : IDream
  10. {
  11. internal List<DreamError> _Errors
  12. {
  13. get { return _Engine._Errors; }
  14. set { _Engine._Errors = value; }
  15. }
  16. public List<DreamError> Errors
  17. {
  18. get { return _Engine._Errors; }
  19. }
  20. internal bool _HasErrors
  21. {
  22. get { return _Engine._HasErrors; }
  23. set { _Engine._HasErrors = value; }
  24. }
  25. public bool HasErrors
  26. {
  27. get { return _HasErrors; }
  28. }
  29. internal string _Name;
  30. public string Name
  31. {
  32. get { return _Name; }
  33. }
  34. internal bool _IsScript;
  35. public dynamic Info{get {return _Engine.Info;}set{_Engine.Info = value;}}
  36. internal dynamic _Engine; //Dreaming.Dream or Dreaming.Script
  37. /// <summary>
  38. /// Build a new Reverie receiving a String of code as argument.
  39. /// </summary>
  40. /// <param name="code">The string of code</param>
  41. /// <param name="language">The language in which the code is written. Defaults to Reflective-C#.</param>
  42. public Reverie(string code, Language language = Language.ReflectiveSharp)
  43. {
  44. if (language == Language.Brainfuck || language == Language.IronPython || language == Language.IronRuby
  45. || language == Language.JavaScript || language == Language.Lua)
  46. {
  47. _IsScript = true;
  48. _Engine = new Script(code, (ScriptLanguage)language);
  49. Info = new ScriptInfo();
  50. Info.Language = (ScriptLanguage)language;
  51. }
  52. else
  53. {
  54. _IsScript = false;
  55. _Engine = new Dream(code, (DreamLanguage)language);
  56. Info = new DreamInfo(DreamType.Reverie);
  57. Info.Language = (DreamLanguage)language;
  58. }
  59. UpdateName();
  60. }
  61. public bool Invoke()
  62. {
  63. return _Engine.Invoke();
  64. }
  65. public void InsertObject(string name, object obj)
  66. {
  67. _Engine.InsertObject(name, obj);
  68. }
  69. public dynamic RetrieveObject(string name)
  70. {
  71. return _Engine.RetrieveObject(name);
  72. }
  73. internal void UpdateName()
  74. {
  75. //the dream name is a MD5 hash of its characteristics.
  76. //TODO: Implement Json and generate a object for this.
  77. string assembled = (string.Format("[{0}][{1}][{2}]", _Engine._Str_Code, Info.Language.ToString(), Info.Threaded.ToString()));
  78. Info._Name = assembled.GetMD5Hash();
  79. }
  80. }
  81. }